import { useUserStore } from '@/store/modules/user'
import { ElMessage, ElMessageBox } from 'element-plus'

// 无权限页面组件（动态导入，避免提前加载）
const NoPermission = () => import('@/views/403/NoPermission.vue')

// 👉 关键修改：接收 router 参数，不再内部导入
export const routerGuard = (router) => {
  // 前置守卫：登录校验 + 角色权限校验
  router.beforeEach((to, from, next) => {
    const userStore = useUserStore()
    const requiresAuth = to.meta.requiresAuth // 是否需要登录

    // 1. 不需要登录的页面（登录/注册）：直接放行
    if (!requiresAuth) {
      // 已登录状态下访问登录/注册页 → 跳对应角色首页
      if (userStore.isLogin) {
        const role = userStore.role
        if (role === 'super_admin') next('/super-admin/user-manage')
        else if (role === 'merchant') next('/merchant/product-manage')
        else if (role === 'doctor') next('/doctor/doctor-info')
        else next('/login')
      } else {
        next()
      }
      return
    }

    // 2. 需要登录的页面：未登录 → 跳登录页
    if (!userStore.isLogin) {
      ElMessageBox.confirm(
        '请先登录后再操作',
        '未登录提示',
        { confirmButtonText: '去登录', cancelButtonText: '取消', type: 'warning' }
      ).then(() => {
        next('/login')
      }).catch(() => {
        next(false) // 取消则留在当前页
      })
      return
    }

    // 3. 已登录：角色权限校验
    const userRole = userStore.role
    const requiredRole = to.meta.role // 页面要求的角色

    // 角色匹配 → 放行
    if (userRole === requiredRole) {
      next()
    } 
    // 角色不匹配 → 跳无权限页
    else {
      ElMessage.error('无此页面访问权限')
      next({ path: '/403' }) // 跳403页
    }
  })

  // 后置守卫：设置页面标题
  router.afterEach((to) => {
    if (to.meta.title) {
      document.title = to.meta.title + ' - 宠物医疗服务平台'
    } else {
      document.title = '宠物医疗服务平台'
    }
  })

  // 路由错误处理（如路径不存在）
  router.onError((error) => {
    ElMessage.error(`路由错误：${error.message}`)
  })

  // 注册403无权限路由（动态添加）
  router.addRoute({
    path: '/403',
    name: 'NoPermission',
    component: NoPermission,
    meta: { title: '无访问权限' }
  })

  // 注册404页面路由（补充完整）
  router.addRoute({
    path: '/:pathMatch(.*)*',
    name: 'NotFound',
    component: () => import('@/views/404/NotFound.vue'),
    meta: { title: '页面不存在' }
  })
}